//package com.nf.health.app.utils.wximpl.utils;
//
//import android.os.Handler;
//import android.os.Looper;
//
//import com.ed.edou.common.Constants;
//import com.google.gson.Gson;
//import com.google.gson.internal.$Gson$Types;
//
//import java.io.IOException;
//import java.lang.reflect.ParameterizedType;
//import java.lang.reflect.Type;
//import java.util.List;
//import java.util.concurrent.TimeUnit;
//
//import okhttp3.Call;
//import okhttp3.Callback;
//import okhttp3.FormBody;
//import okhttp3.MediaType;
//import okhttp3.OkHttpClient;
//import okhttp3.Request;
//import okhttp3.RequestBody;
//import okhttp3.Response;
//
///**
// *
// * Description : OkHttp网络连接封装工具类  解析用的是Gson 记得添加Gson依赖 或者jar包
// */
//public class OkHttpUtils {
//
//    private static final String TAG = "OkHttpUtils";
//
//    private static OkHttpUtils mInstance;
//    private OkHttpClient mOkHttpClient;
//    private Handler mDelivery;
//    private Gson mGson;
//
//    private OkHttpUtils() {
//        mOkHttpClient = new OkHttpClient.Builder()
//                .connectTimeout(10, TimeUnit.SECONDS)
//                .writeTimeout(10, TimeUnit.SECONDS)
//                .readTimeout(30, TimeUnit.SECONDS)
//                .build();
//        mGson = new Gson();
//        mDelivery = new Handler(Looper.getMainLooper());
//    }
//
//    private synchronized static OkHttpUtils getmInstance() {
//        if (mInstance == null) {
//            mInstance = new OkHttpUtils();
//        }
//        return mInstance;
//    }
//
//    private void getRequest(String url, final ResultCallback callback) {
//        final Request request = new Request.Builder().url(url).build();
//        deliveryResult(callback, request);
//    }
//
//    private void postRequest(String url, final ResultCallback callback, List<Param> params) {
//        Request request = buildPostRequest(url, params);
//        deliveryResult(callback, request);
//    }
//
//    private void postRequest(String url, final ResultCallback callback,String xml) {
//        Request request = buildPostRequest(url, xml);
//        deliveryResult(callback, request);
//    }
//
//    /**
//     * 处理结果
//     * @param callback
//     * @param request
//     */
//    private void deliveryResult(final ResultCallback callback, Request request) {
//
//        mOkHttpClient.newCall(request).enqueue(new Callback() {
//            @Override
//            public void onFailure(Call call, IOException e) {
//                sendFailCallback(callback, e);
//            }
//
//            @Override
//            public void onResponse(Call call, Response response) throws IOException {
//                try {
//                    String str = response.body().string();
//                    if (callback.mType == String.class) {
//                        /**
//                         * 返回字符串
//                         */
//                        sendSuccessCallBack(callback, str);
//                    } else {
//                        /**
//                         * 这里处理解析返回对象
//                         */
//                        Object object = mGson.fromJson(str, callback.mType);
//                        sendSuccessCallBack(callback, object);
//
//                    }
//                } catch (final Exception e) {
////                    LogUtils.e(TAG, "convert json failure", e);
//                    sendFailCallback(callback, e);
//                }
//            }
//        });
//    }
//
//    private void sendFailCallback(final ResultCallback callback, final Exception e) {
//        mDelivery.post(new Runnable() {
//            @Override
//            public void run() {
//                if (callback != null) {
//                    callback.onFailure(e);
//                }
//            }
//        });
//    }
//
//    private void sendSuccessCallBack(final ResultCallback callback, final Object obj) {
//        mDelivery.post(new Runnable() {
//            @Override
//            public void run() {
//                if (callback != null) {
//                    callback.onSuccess(obj);
//                }
//            }
//        });
//    }
//
//    private Request buildPostRequest(String url, List<Param> params) {
//        FormBody.Builder builder= new FormBody.Builder();
//        for (Param param : params) {
//            builder.add(param.key, param.value);
//        }
//        RequestBody requestBody = builder.build();
//        return new Request.Builder().url(url).post(requestBody).build();
//    }
//
//    private Request buildPostRequest(String url, String xml) {
//        MediaType MEDIA_TYPE_TEXT = MediaType.parse("text/xml");
//        RequestBody requestBody = RequestBody.create(MEDIA_TYPE_TEXT,xml);
//        return new  Request.Builder().url(url).post(requestBody).build();
//    }
//
//
//    /**********************对外接口************************/
//
//    /**
//     * get请求
//     * @param url  请求url
//     * @param callback  请求回调
//     */
//    public static void get(String url, ResultCallback callback) {
//        getmInstance().getRequest(url, callback);
//    }
//
//    /**
//     * post请求
//     * @param url       请求url
//     * @param callback  请求回调
//     * @param params    请求参数
//     */
//    public static void post(String url, final ResultCallback callback, List<Param> params) {
//        getmInstance().postRequest(url, callback, params);
//    }
//
//    public static void post(String url, final ResultCallback callback, String xml) {
//        getmInstance().postRequest(url, callback, xml);
//    }
//    /**
//     * http请求回调类,回调方法在UI线程中执行
//     * @param <T>
//     */
//    public static abstract class ResultCallback<T> {
//
//        Type mType;
//
//        public ResultCallback(){
//            mType = getSuperclassTypeParameter(getClass());
//        }
//
//        static Type getSuperclassTypeParameter(Class<?> subclass) {
//            Type superclass = subclass.getGenericSuperclass();
//            if (superclass instanceof Class) {
//                throw new RuntimeException("Missing type parameter.");
//            }
//            ParameterizedType parameterized = (ParameterizedType) superclass;
//            return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);
//        }
//
//        /**
//         * 请求成功回调
//         * @param response
//         */
//        public abstract void onSuccess(T response);
//
//        /**
//         * 请求失败回调
//         * @param e
//         */
//        public abstract void onFailure(Exception e);
//    }
//
//    /**
//     * post请求参数类   这里可以根据项目抽取成泛型
//     */
//    public static class Param {
//
//        String key;
//        String value;
//
//        public Param() {
//        }
//
//        public Param(String key, String value) {
//            this.key = key;
//            this.value = value;
//        }
//
//    }
//
//
//}
